﻿#define _CRT_SECURE_NO_WARNINGS
//模拟实现strlen
//#include <stdio.h>
//#include <assert.h>
//size_t my_strlen(char* str)
//{
//	assert(str);
//	char* origin = str;
//	while (*str)
//	{
//		str++;
//	}
//	return str - origin;
//}
//int main()
//{
//	char str[] = "abcdefg";
//	size_t len=my_strlen(str);
//	printf("%zd", len);
//	return 0;
//}
//模拟实现strcpy
//#include <stdio.h>
//#include <assert.h>
//char* my_strcpy(char* dest, const char* source)
//{
//	assert(source&&dest);
//	char* ret = dest;
//	while (*source)
//	{
//		*dest = *source;
//		dest++;
//		source++;
//	}
//	return ret;
//}
//int main()
//{
//	char str1[10] = { 0 };
//	char str2[] = "abcde";
//	my_strcpy(str1, str2);
//	printf("%s", str1);
//	return 0;
//}
//模拟实现strcmp
//#include <stdio.h>
//#include <assert.h>
//int my_strcmp(const char* str1, const char* str2)
//{
//	assert(str1 && str2);
//	while (*str1 == *str2)
//	{
//		if (*str1 == '\0')
//		{
//			return 0;
//		}
//		str1++;
//		str2++;
//	}
//	return *str1 - *str2;
//}
//int main()
//{
//	char str1[] = "abcde";
//	char str2[] = "abde";
//	int ret=my_strcmp(str1, str2);
//	if (ret > 0)
//		printf("str1大于str2\n");
//	else if(ret==0)
//		printf("str1等于str2\n");
//	else
//		printf("str1小于str2\n");
//	return 0;
//}
//模拟实现strcat
//#include <stdio.h>
//#include <assert.h>
//char* my_strcat(char* dest, const char* source)
//{
//	assert(dest && source);
//	char* ret = dest;
//	while (*dest)
//	{
//		dest++;
//	}
//	while (*source)
//	{
//		*dest = *source;
//		dest++;
//		source++;
//	}
//	*dest = *source;
//	return ret;
//}
//int main()
//{
//	char str1[20] = "Hello ";
//	char str2[] = "World";
//	my_strcat(str1, str2);
//	printf("%s", str1);
//	return 0;
//}
//模拟实现strstr
//#include <stdio.h>
//#include <assert.h>
//char* my_strstr(const char* str1, const char* str2)
//{
//	if (*str2 == '\0')
//		return (char*) str1;
//	while (*str1)
//	{
//		const char* cur = str1;
//		const char* s1 = cur;
//		const char* s2 = str2;
//		while (*s1 == *s2)
//		{
//			if (*s2 == '\0')
//				return (char*) cur;
//			s1++;
//			s2++;
//		}
//		if (*s2 == '\0')
//			return (char*)cur;
//		str1++;
//	}
//	return NULL;
//}
//int main()
//{
//	char str1[] = "abcdef";
//	char str2[] = "abe";
//	char* ret=my_strstr(str1, str2);
//	if (ret != NULL)
//		printf("在str1中能找到str2\n");
//	else
//		printf("在str1中不能找到str2\n");
//	return 0;
//}
//#include <errno.h>
//#include <string.h>
//#include <stdio.h>
////我们打印⼀下0~10这些错误码对应的信息
//int main()
//{
//	int i = 0;
//	for (i = 0; i <= 10; i++)
//	{
//		printf("%d:%s\n",i, strerror(i));
//	}
//	return 0;
//}
//#include <stdio.h>
////#include <string.h>
////#include <errno.h>
//int main()
//{
//	FILE* pFile;
//	pFile = fopen("unexist.ent", "r");
//	if (pFile == NULL)
//		//printf("Error opening file unexist.ent: %s\n", strerror(errno));
//	perror("Error opening file unexist.ent");
//	return 0;
//}
// #include <stdio.h>
//#include <string.h>
//int main()
//{
//	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[10] = { 0 };
//	memcpy(arr2, arr1, 20);
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr2[i]);
//	}
//	return 0;
//}
//memcpy模拟实现
//#include <stdio.h>
//#include <assert.h>
//////注意num为要复制的字节数
//void* my_memcpy(void* dest, const void* source, size_t num)
//{
//	assert(dest && source);
//	void* ret = dest;
//	while (num--)
//	{
//		//将source中每个字节一一赋值给dest
//		*(char*)dest = *(char*)source;
//		//因为void*不能直接++，故应该强制类型转换为char*
//		dest = (char*)dest + 1;
//		source = (char*)source + 1;
//	}
//	return ret;
//}
//int main()
//{
//	int arr1[10] = { 0 };
//	int arr2[] = { 1,2,3,4,5,6,7,8};
//	my_memcpy(arr1, arr2,5*sizeof(int) );
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr1[i]);
//	}
//	return 0;
//}
// #include <stdio.h>
//#include <string.h>
//int main()
//{
//	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//	my_memcpy(arr1 + 2, arr1, 20);
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr1[i]);//1 2 1 2 1 2 1 8 9 10
//	}
//	printf("\n");
//	int arr2[] = { 1,2,3,4,5,6,7,8,9,10 };
//	memmove(arr2 + 2, arr2, 20);
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr2[i]);//1 2 1 2 3 4 5 8 9 10 
//	}
//		return 0;
//}
//memmove的模拟实现
//#include <stdio.h>
//#include <assert.h>
//void* my_memmove(void* dest, const void* source, size_t num)
//{
//	从前向后复制
//	if (dest <= source)
//	{
//		void* ret = dest;
//		while (num--)
//		{
//			*(char*)dest = *(char*)source;
//			dest = (char*)dest + 1;
//			source = (char*)source + 1;
//		}
//		return ret;
//	}
//	从后向前复制
//	else
//	{
//		while (num--)
//		{
//			*((char*)dest + num) = *((char*)source + num);
//		}
//		*(char*)dest = *(char*)source;
//		return dest;
//	}
//}
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7 };
//	my_memmove(arr+2, arr, 4 * sizeof(int));
//	int i = 0;
//	for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
//	{
//		printf("%d ", arr[i]);
//		1 2 1 2 3 4 7
//	}
//	return 0;
//}
//memcmp的模拟实现
//#include <stdio.h>
//#include <assert.h>
//int my_memcmp(const void* p1, const void* p2, size_t num)
//{
//	while (num--)
//	{
//		if (*(char*)p1 == *(char*)p2)
//		{
//			p1 = (char*)p1 + 1;
//			p2 = (char*)p2 + 1;
//		}
//		else
//			return *(char*)p1 - *(char*)p2;
//	}
//	return 0;
//}
//int main()
//{
//	int arr1[] = { 1,2,3,4,5 };
//	int arr2[] = { 1,2,3,6,7 };
//	int ret1=my_memcmp(arr1, arr2, 5 * sizeof(int));
//	if (ret1 < 0)
//		printf("arr1小于arr2\n");
//	else if(ret1==0)
//		printf("arr1等于arr2\n");
//	else 
//		printf("arr1大于arr2\n");
//	char str1[] = "abcde";
//	char str2[] = "abce";
//	int ret2 = my_memcmp(str1, str2, 5 * sizeof(char));
//	if (ret2 < 0)
//		printf("str1小于str2\n");
//	else if (ret2 == 0)
//		printf("str1等于str2\n");
//	else
//		printf("str1大于str2\n");
//	return 0;
////}
//写一个函数判断当前机器是大端还是小端，如果是小端返回1，如果是大端返回0.
//#include <stdio.h>
//void Jude()
//{
//	int a = 1;
//	char* ret = (char*)&a;
//	if (*ret == 1)
//		printf("当前机器为小端\n");
//	else
//		printf("当前机器为大端\n");
//}
//int main()
//{
//	Jude();
//	return 0;
//}
//模拟实现strncat
//#include <stdio.h>
//#include <assert.h>
//char* my_strncat(char* dest, const char* source, size_t num)
//{
//	assert(dest && source);
//	char* ret = dest;
//	while (*dest)
//	{
//		dest++;
//	}
//	while (num--)
//	{
//		if (*source == '\0')
//			break;
//		*dest = *source;
//		dest++;
//		source++;
//	}
//	*dest = '\0';
//	return ret;
//}
//int main()
//{
//	char str1[20] = "Hello ";
//	char str2[] = "World";
//	my_strncat(str1, str2, 3);
//	printf("%s", str1);
//	return 0;
//}
//模拟实现strncpy
//#include <stdio.h>
//#include <assert.h>
//char* my_strncpy(char* dest, const char* source, size_t num)
//{
//	char* ret = dest;
//	while (num--)
//	{
//		if (*source != '\0')
//		{
//			*dest = *source;
//		}
//		else
//		{
//			*dest = '\0';
//		}
//		dest++;
//		source++;
//    }
//	*dest = '\0';
//	return ret;
//}
//int main()
//{
//	char str1[10] = { 0 };
//	char str2[] = "abcde";
//	my_strncpy(str1, str2,3);
//	printf("%s", str1);
//	return 0;
//}